(V cU cUP cU822P2cU cU\28"2&2P2cU cU\28,22P2cU cU\2x)2+2P2cU cU\2!2p(2P2cU cU\2x cUf2P2cUP cUx2q22r2:r2 cU\2x)2k2P2cU cU\28,2^2P2cU cU\28,2b2P2cU cU\2X2p2P2cU cU\282h2P2cU cU\2 cU2P2cUМ cUx2q2q2*r2 cU\2)22P2cU cU\2X(2P2P2cU cU\2x)2`m2P2cU cU\2ss($concrete); } if (is_object($concrete)) { $concrete = $this->invokeMethods($concrete); } if (is_string($concrete) && $this->getContainer()->has($concrete)) { $concrete = $this->getContainer()->get($concrete); } $this->resolved = $concrete; return $concrete; } /** * Resolve a callable. * * @param callable $concrete * * @return mixed */ protected function resolveCallable(callable $concrete) { $resolved = $this->resolveArguments($this->arguments); return call_user_func_array($concrete, $resolved); } /** * Resolve a class. * * @param string $concrete * * @return object * * @throws ReflectionException */ protected function resolveClass(string $concrete) { $resolved = $this->resolveArguments($this->arguments); $reflection = new ReflectionClass($concrete); return $reflection->newInstanceArgs($resolved); } /** * Invoke methods on resolved instance. * * @param object $instance * * @return object */ protected function invokeMethods($instance) { foreach ($this->methods as $method) { $args = $this->resolveArguments($method['arguments']); /** @var callable $callable */ $callable = [$instance, $method['method']]; call_user_func_array($callable, $args); } return $instance; } }